diff --git a/system/libraries/Loader.php b/system/libraries/Loader.php
index 1176265..aa1ae8c 100644
--- a/system/libraries/Loader.php
+++ b/system/libraries/Loader.php
@@ -34,6 +34,7 @@
 	var $_ci_is_php5		= FALSE;
 	var $_ci_is_instance 	= FALSE; // Whether we should use $this or $CI =& get_instance()
 	var $_ci_cached_vars	= array();
+	var $_ci_classes		= array();
 	var $_ci_models			= array();
 	var $_ci_helpers		= array();
 	var $_ci_plugins		= array();
@@ -305,17 +306,17 @@
 		}
 	
 		foreach ($helpers as $helper)
-		{
+		{		
+			$helper = strtolower(str_replace(EXT, '', str_replace('_helper', '', $helper)).'_helper');
+		
 			if (isset($this->_ci_helpers[$helper]))
 			{
 				continue;
 			}
-		
-			$helper = strtolower(str_replace(EXT, '', str_replace('_helper', '', $helper)).'_helper');
-		
+
 			if (file_exists(APPPATH.'helpers/'.$helper.EXT))
-			{
-				include(APPPATH.'helpers/'.$helper.EXT);
+			{ 
+				include_once(APPPATH.'helpers/'.$helper.EXT);
 			}
 			else
 			{		
@@ -330,6 +331,7 @@
 			}
 
 			$this->_ci_helpers[$helper] = TRUE;
+			
 		}
 		
 		log_message('debug', 'Helpers loaded: '.implode(', ', $helpers));
@@ -371,14 +373,14 @@
 		}
 	
 		foreach ($plugins as $plugin)
-		{
+		{	
+			$plugin = strtolower(str_replace(EXT, '', str_replace('_plugin.', '', $plugin)).'_pi');		
+
 			if (isset($this->_ci_plugins[$plugin]))
 			{
 				continue;
 			}
-	
-			$plugin = strtolower(str_replace(EXT, '', str_replace('_plugin.', '', $plugin)).'_pi');		
-		
+
 			if (file_exists(APPPATH.'plugins/'.$plugin.EXT))
 			{
 				include(APPPATH.'plugins/'.$plugin.EXT);	
@@ -441,13 +443,13 @@
 		}
 	
 		foreach ($scripts as $script)
-		{
+		{	
+			$script = strtolower(str_replace(EXT, '', $script));
+
 			if (isset($this->_ci_scripts[$script]))
 			{
 				continue;
 			}
-	
-			$script = strtolower(str_replace(EXT, '', $script));
 		
 			if ( ! file_exists(APPPATH.'scripts/'.$script.EXT))
 			{
@@ -455,8 +457,6 @@
 			}
 			
 			include(APPPATH.'scripts/'.$script.EXT);
-			
-			$this->_ci_scripts[$script] = TRUE;
 		}
 		
 		log_message('debug', 'Scripts loaded: '.implode(', ', $scripts));
@@ -534,6 +534,30 @@
 	 */
 	function _ci_load($data)
 	{
+		// Set the default data variables
+		foreach (array('view', 'vars', 'path', 'return') as $val)
+		{
+			$$val = ( ! isset($data[$val])) ? FALSE : $data[$val];
+		}
+
+		// Set the path to the requested file
+		if ($path == '')
+		{
+			$ext = pathinfo($view, PATHINFO_EXTENSION);
+			$file = ($ext == '') ? $view.EXT : $view;
+			$path = $this->_ci_view_path.$file;
+		}
+		else
+		{
+			$x = explode('/', $path);
+			$file = end($x);
+		}
+		
+		if ( ! file_exists($path))
+		{
+			show_error('Unable to load the requested file: '.$file);
+		}
+	
 		// This allows anything loaded using $this->load (views, files, etc.)
 		// to become accessible from within the Controller and Model functions.
 		// Only needed when running PHP 5
@@ -550,12 +574,6 @@
 			}
 		}
 		
-		// Set the default data variables
-		foreach (array('view', 'vars', 'path', 'return') as $val)
-		{
-			$$val = ( ! isset($data[$val])) ? FALSE : $data[$val];
-		}
-		
 		/*
 		 * Extract and cache variables
 		 *
@@ -570,19 +588,6 @@
 		}
 		extract($this->_ci_cached_vars);
 				
-		// Set the path to the requested file
-		if ($path == '')
-		{
-			$ext = pathinfo($view, PATHINFO_EXTENSION);
-			$file = ($ext == '') ? $view.EXT : $view;
-			$path = $this->_ci_view_path.$file;
-		}
-		else
-		{
-			$x = explode('/', $path);
-			$file = end($x);
-		}
-
 		/*
 		 * Buffer the output
 		 *
@@ -595,11 +600,6 @@
 		 * can intercept the content right before it's sent to
 		 * the browser and then stop the timer it won't be accurate.
 		 */
-		if ( ! file_exists($path))
-		{
-			show_error('Unable to load the requested file: '.$file);
-		}
-
 		ob_start();
 				
 		// If the PHP installation does not support short tags we'll
@@ -682,19 +682,32 @@
 		}
 
 		// Lets search for the requested library file and load it.
+		$is_duplicate = FALSE;		
 		for ($i = 1; $i < 3; $i++)
 		{
-			$path = ($i % 2) ? APPPATH : BASEPATH;		
-			if (file_exists($path.'libraries/'.$class.EXT))
+			$path = ($i % 2) ? APPPATH : BASEPATH;	
+			
+			$fp = $path.'libraries/'.$class.EXT;
+			
+			// Safety:  Was the class already loaded by a previous call?
+			if (in_array($fp, $this->_ci_classes) OR ! file_exists($fp))
 			{
-				include($path.'libraries/'.$class.EXT);
-				return $this->_ci_init_class($class, '', $params);
+				$is_duplicate = TRUE;
+				continue;
 			}
+			
+			include($fp);
+			$this->_ci_classes[] = $fp;
+			return $this->_ci_init_class($class, '', $params);
 		}
-		
-		// If we got this far we were unable to find the requested class
-		log_message('error', "Unable to load the requested class: ".$class);
-		show_error("Unable to load the requested class: ".$class);
+
+		// If we got this far we were unable to find the requested class.
+		// We do not issue errors if the load call failed due to a duplicate request
+		if ($is_duplicate == FALSE)
+		{
+			log_message('error', "Unable to load the requested class: ".$class);
+			show_error("Unable to load the requested class: ".$class);
+		}
 	}
 	
 	// --------------------------------------------------------------------
